package com.itzjc.controller;

import com.itzjc.domain.entity.Result;
import com.itzjc.service.UploadService;
import com.itzjc.utils.QiNiuUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

import java.util.*;

/**
 * 上传相关的controller
 *
 * @className: UploadController
 * @date: 2021-06-16 09:40
 **/
@RestController
@RequestMapping("/web/api/v1/pri/upload")
public class UploadController {
    @Autowired
    private UploadService uploadService;

    /**
     * 这里说明一下，这个controller没有进入到service，只是在本层就完成了图片的上传了
     * 真正修改数据库中的img的就到project的controller中去找
     * 上传的时候都是post请求，所以全部都需要拦截器放行，每写一个方法都配置一下
     *
     * @param imgFile
     * @return:
     **/

    @PostMapping("/uploadImg")
    //接受参数的时候没有注解的时候是接受不到参数的，这个注解的名称要和浏览器的对应上
    public Result uploadImg(@RequestParam("file") MultipartFile imgFile) {
        if (null != imgFile) {
            //获取原有的图片名称，截取后缀名
            String originalFilename = imgFile.getOriginalFilename();

            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));

            //生成唯一文件名称，拼接后缀
            String filename = UUID.randomUUID() + extension;
            //调用七牛API上传
            try {
                QiNiuUtils.uploadViaByte(imgFile.getBytes(), filename);

                //返回数据给页面
                Map<String, String> map = new HashMap<>();
                map.put("imgName", filename);
                map.put("domain", QiNiuUtils.DOMAIN);
                return Result.buildSuccess("上传成功", map);


            } catch (IOException e) {
                e.printStackTrace();
                return Result.buildError("上传失败", 300);
            }
        } else {
            return Result.buildError("请上传正确的文件");
        }


    }

    @PostMapping("/uploadFile")
    //接受参数的时候没有注解的时候是接受不到参数的，这个注解的名称要和浏览器的对应上
    public Result uploadFile(@RequestParam("file") MultipartFile imgFile) {
        if (null != imgFile) {
            //获取原有的图片名称，截取后缀名
            String originalFilename = imgFile.getOriginalFilename();

            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));

            //生成唯一文件名称，拼接后缀
            String filename = UUID.randomUUID() + extension;
            //调用七牛API上传
            try {
                QiNiuUtils.uploadViaByte(imgFile.getBytes(), filename);

                //返回数据给页面
                Map<String, String> map = new HashMap<>();
                map.put("fileURL", filename);
                map.put("domain", QiNiuUtils.DOMAIN);
                return Result.buildSuccess("上传成功", map);


            } catch (IOException e) {
                e.printStackTrace();
                return Result.buildError("上传失败", 300);
            }
        } else {
            return Result.buildError("请上传正确的文件");
        }


    }

    /**
    *   这里的 方法名称没有改，将就用吧
    * @param objFile
    * @return:
    **/

    @PostMapping("/uploadMethod")
    public Result uploadObj(@RequestParam("file") MultipartFile objFile) {
        if (null != objFile) {
            //获取原有的名称，截取后缀名
            String originalFilename = objFile.getOriginalFilename();

            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));

            //生成唯一文件名称，拼接后缀
            String filename = UUID.randomUUID() + extension;
            //调用七牛API上传
            try {
                QiNiuUtils.uploadViaByte(objFile.getBytes(), filename);

                //返回数据给页面
                Map<String, String> map = new HashMap<>();
                map.put("methodURL", filename);
                map.put("domain", QiNiuUtils.DOMAIN);
                return Result.buildSuccess("上传成功", map);


            } catch (IOException e) {
                e.printStackTrace();
                return Result.buildError("上传失败", 300);
            }
        } else {
            return Result.buildError("请上传正确的文件");
        }
    }

    @PostMapping("/uploadAgreement")
    public Result uploadMtl(@RequestParam("file") MultipartFile mtlFile) {
        if (null != mtlFile) {
            //获取原有的文件名称，截取后缀名
            String originalFilename = mtlFile.getOriginalFilename();

            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));

            //生成唯一文件名称，拼接后缀
            String filename = UUID.randomUUID() + extension;
            //调用七牛API上传
            try {
                QiNiuUtils.uploadViaByte(mtlFile.getBytes(), filename);

                //返回数据给页面
                Map<String, String> map = new HashMap<>();
                map.put("agreementURL", filename);
                map.put("domain", QiNiuUtils.DOMAIN);
                return Result.buildSuccess("上传成功", map);


            } catch (IOException e) {
                e.printStackTrace();
                return Result.buildError("上传失败", 300);
            }
        } else {
            return Result.buildError("请上传正确的文件");
        }
    }
}
